iT邦幫忙

3

truncate table前保留資料的妙招

  • 分享至 

  • xImage
  •  

當我們有大量刪除table資料的需求時,如果傻傻的用delete會發現執行得非常之慢,一兩百萬筆資料大概就要執行個半小時。

這時我們就可以利用truncate的DDL語句來做到大量刪除資料的效果:

truncate table 'YOUR_TABLE_NAME'

執行這句後,整張table的資料會在彈指之間直接被清空。但我們通常沒有要清的這麼乾淨,還是有需要保留的資料怎麼辦?

很直覺地,我們會想到可以建一張column都一樣table來暫存要保留的資料,在truncate完本尊後insert回去就搞定了~

到這邊就是我寫這邊文章最想分享的地方了,因為當我們要建立table的時候,會很麻煩地要把各個column定義出來:

create table YOUR_TABLE_NAME(
    NAME varchar(10),
    AMOUNT int,
    FLAG bit,
    ...
)

是不是很麻煩,就算透過各家DB的UI工具去產生table create sql,那也是要去複製出來搞一搞?怎麼樣這套做法都得多搞一個步驟出來去定義table,太麻煩了。

這時候就有個很讚的語法,通常會搭配temperary table服用:

-- sql server syntax
select * into #YOUR_TABLE_NAME from YOUR_TABLE_NAME where ...

就這樣!搞定了。透過這個語法我們就做到了保留資料跟創建table,超舒服。當然因為我現在工作上是用sql server,可以直接套用在temp table,或許其他DB應該也會有類似的語法可用。

或者也可以使用以下語法:

create table TEMP_TABLE_NAME as (select * from YOUR_TABLE_NAME)

也可以做到建立table的同時複製資料,並不用再定義繁瑣的column設定。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言